// 创建顺序表
#include "seqlist.h"

// 1.创建一个空的顺序表
seqlist_t *CreateEpSeqlist()
{
    seqlist_t *p = (seqlist_t *)malloc(sizeof(seqlist_t));
    // 为了提高程序的健壮性，都要加错误提示
    // 变量在后面！！！！！！！！
    if (NULL == p)
    {
        // 打印错误信息
        perror("p maclloc err");
        // 指针函数返回指针ＮＵＬＬ
        return NULL;
    }
    // Ｎ　＝＝　０；ｌａｓｔ＝＝－；　Ｎ　＝＝　１；ｌａｓｔ　＝＝０；
    p->last = -1;

    return p;
}

// 4.判断顺序表是否为满,满返回１　未满返回０
int IsFullSeqlist(seqlist_t *p)
{
    // 如果满了返回１　未满返回０
    // N == p->last+1; 成立返回１　
    return N == p->last + 1;
}
// 5.判断顺序表是否为空
int IsEpSeqlist(seqlist_t *p)
{
    return -1 == p->last;
}

// 2.向顺序表的指定位置插入数据
// post第几个位置，data插入的数据
int InsertIntoSeqlist(seqlist_t *p, int post, int data)
{
    // (post>p->last+1)　连续存贮，不能跳过一个元素给后面的赋值
    // (post<0)         数组下表最小为０
    // IsFullSeqlist(p)  数组满了返回１
    if ((post > p->last + 1) || (post < 0) || IsFullSeqlist(p))
    {
        perror("插入失败");
        return -1;
    }
    for (int i = p->last; i >= post; i++)
        p->data[i + 1] = p->data[i];
    p->data[post] = data;
    p->last++;
    return 0;
}

// 6.删除顺序表中指定位置的数据post删除位置
int DeletePostSeqlist(seqlist_t *p, int post)
{

    if (post > p->last || post < 0 || IsEpSeqlist(p))
    {
        perror("删除失败");
        return -1;
    }
    for (int i = post; i < p->last; i++)
        p->data[i] = p->data[i + 1];
    p->last--;
    return 0;
}
// 7.清空顺序表
void ClearSeqList(seqlist_t *p)
{
    p->last = -1;
}

// 8.修改指定位置的数据
// post被修改的位置，data修改成的数据
int ChangePostSeqList(seqlist_t *p, int post, int data)
{
    if (post > p->last || post < 0 || IsEpSeqlist(p))
    {
        perror("修改失败");
        return -1;
    }
    p->data[post] = data;
    return 0;
}

// 9.查找指定数据出现的位置(下标)
// data代表被查找的数据
int SearchDataSeqList(seqlist_t *p, int data)
{

    for (int i = 0; i <= p->last; i++)
    {
        if (p->data[i] == data)
            return i;
    }

    return -1;
}

// 3.遍历顺序表sequence 顺序　list 表
void ShowSeqlist(seqlist_t *p)
{

    if (IsEpSeqlist(p))
    {
        printf("顺序表为空\n");
        // 空类型直接返回
        return;
    }
    for (int i = 0; i <= p->last; i++)
    {
        printf("%d ", p->data[i]);
    }
    puts(" ");
}